<%# The license inside this block applies to this file.
	# Copyright 2017 Google Inc.
	# Licensed under the Apache License, Version 2.0 (the "License");
	# you may not use this file except in compliance with the License.
	# You may obtain a copy of the License at
	#
	#     http://www.apache.org/licenses/LICENSE-2.0
	#
	# Unless required by applicable law or agreed to in writing, software
	# distributed under the License is distributed on an "AS IS" BASIS,
	# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
	# See the License for the specific language governing permissions and
	# limitations under the License.
-%>
<%# This provides the best long-form self link possible given the input.
  # If the input is a full URL including scheme, we return it unmodified
  #      https://compute.googleapis.com/v1/projects/foo/regions/bar/backendBuckets/baz -> (the same)
  # If the input is a partial self-link, we return it with the compute base path in front.
  #      projects/foo/regions/bar/backendServices/baz -> https://compute.googleapis.com/v1/projects/foo/regions/bar/backendServices/baz
  # If the input is an even-more-partial link (not including projects), we return it with the compute base path
  # and the specified project in front
  #      regions/bar/backendServices/baz -> https://compute.googleapis.com/v1/projects/provider-project/regions/bar/backendServices/baz
  # If the input is just project/region/name, region/name, or just name, we treat it like a backendService.
  #      baz -> https://compute.googleapis.com/v1/projects/provider-project/regions/provider-region/backendServices/baz
  #      bar/baz -> https://compute.googleapis.com/v1/projects/provider-project/regions/bar/backendServices/baz
  #      foo/bar/baz -> https://compute.googleapis.com/v1/projects/foo/regions/bar/backendServices/baz
-%>
func expand<%= prefix -%><%= titlelize_property(property) -%>(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
  // This method returns a full self link from whatever the input is.
  if v == nil || v.(string) == "" {
    // It does not try to construct anything from empty.
    return "", nil
  } else if strings.HasPrefix(v.(string), "https://") {
    // Anything that starts with a URL scheme is assumed to be a self link worth using.
    return v, nil
  } else if strings.HasPrefix(v.(string), "projects/") {
    // If the self link references a project, we'll just stuck the compute prefix on it
    url, err := replaceVars(d, config, "{{ComputeBasePath}}" + v.(string))
    if err != nil {
      return "", err
    }
    return url, nil
  } else if strings.HasPrefix(v.(string), "regions/") || strings.HasPrefix(v.(string), "zones/") {
    // For regional or zonal resources which include their region or zone, just put the project in front.
    url, err := replaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/")
    if err != nil {
      return nil, err
    }
    return url + v.(string), nil
  }
  // Anything else is assumed to be a reference to a global backend service.
  f, err := parseGlobalFieldValue("backendServices", v.(string), "project", d, config, true)
  if err != nil {
    return "", err
  }

  return f.RelativeLink(), nil
}
